package com.hw.one.dam2.ledVideo;

import com.hw.one.dam2.service.ISmallAirService;
import com.hw.one.video.exception.HikWsException;
import com.hw.one.video.service.IVideoService;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;

/**
 * 视频 扬尘 数据叠加
 * 
 * @author admin
 *
 */
@Component
public class VideoDataSuperposition {

	private static Logger log = Logger.getLogger(VideoDataSuperposition.class);

	@Resource
	private IVideoService videoService;

	@Autowired
	private ISmallAirService smallAirService;
	/**
	 * 叠加操作
	 */
	public void superpositionData() {
		try {

			// 扬尘数据列表

			List<Map<String, Object>> ycDataList = smallAirService.findNewMinuteRaiseDustDataBySiteCode();
			if (null == ycDataList || ycDataList.size() == 0) {
				log.debug("扬尘视频叠加扬尘监测数据，没有可以叠加的数据。");
				return;
			}
			// 登录视频平台，获取一个票根tgt
			String tgt = videoService.login();
			log.debug("扬尘视频叠加扬尘监测数据，获取的票根tgt：" + tgt);
			if (null == tgt || "".equals(tgt)) {
				log.debug("扬尘视频叠加扬尘监测数据，获取的票根tgt为空，叠加失败！");
				return;
			}

			// 叠加的数据字符串
			// String osdObj = "[{\"osdString\":\"PM2.5:10 PM10:20
			// 温度:19\",\"isShowString\":1,\"xPos\":5,\"yPos\":200}]";
			// [{"osdString":"PM10:104 PM2.5:87
			// 噪音:0","isShowString":1,"xPos":5,"yPos":200}]
			StringBuffer osdObj = null;
			// 遍历扬尘数据，拼凑叠加字符串
			for (Map<String, Object> ycDataMap : ycDataList) {
				osdObj = new StringBuffer();
				osdObj.append("[{\"osdString\":\"PM10:")
						.append(ycDataMap.get("PM10") == null ? 0 : ycDataMap.get("PM10").toString()).append(" PM2.5:")
						.append(ycDataMap.get("PM25") == null ? 0 : ycDataMap.get("PM25").toString()).append(" 噪音:")
						.append(ycDataMap.get("NOISE") == null ? 0 : ycDataMap.get("NOISE").toString()).append("\"")
						.append(",\"isShowString\":1,\"xPos\":5,\"yPos\":230}]");
				Object indexCode = ycDataMap.get("snCode");
				if (null == indexCode)
					continue;
				// 叠加数据
				setYCDataToVideo(osdObj.toString(), indexCode.toString(), tgt);
			}

		} catch (Exception e) {
			e.printStackTrace();
			log.debug("扬尘视频叠加扬尘监测数据，程序报错，操作失败！");
		}
	}

	/**
	 * 数据叠加操作 applyToken 超时时间是30秒，这个需要注意，如果数据太多，可能会操作失败
	 * 
	 * @param osdObj
	 * @param indexCode
	 * @param applyToken
	 * @throws HikWsException
	 */
	private void setYCDataToVideo(String osdObj, String indexCode, String tgt) throws HikWsException {
		// 获取一个令牌Token
		// applyToken 超时时间是30秒，这个需要注意，如果数据太多，可能会操作失败
		String applyToken = videoService.applyToken(tgt);
		log.debug("扬尘视频叠加扬尘监测数据，获取的令牌applyToken：" + applyToken);
		if (null == applyToken || "".equals(applyToken)) {
			log.debug("扬尘视频叠加扬尘监测数据，获取的令牌applyToken为空，叠加失败！");
			return;
		}
		// 返回的结果状态
		Map<String, String> statusMap = videoService.osdSet(osdObj, indexCode, applyToken);
		if (null == statusMap || statusMap.isEmpty()) {
			log.debug("扬尘视频叠加扬尘监测数据，返回状态为空，操作失败！");
			return;
		}
		Object result_code = statusMap.get("result_code");

		if (!"0".equals(result_code)) {
			log.debug("扬尘视频叠加扬尘监测数据，叠加操作失败！设备编号：" + indexCode);
		}
	}
}
